VIM 圆括号引用
- 匹配相邻的重复单词
/\v<(\w+)\_s+\1>
说明:
| 字符 | 意义 |
|---|---|
| \v | 打开 very magic 开关 |
| < | 限定单词开头 |
| () | 方便用于后面的引用. |
| \w+ | 一个单词或多个单词 |
| \_s | 一个或多个 行尾 |
| \1 | 引用 第一个 括号. |
| \0 | 引用整个匹配 |
::: alert-info
使用圆括号,但不捕获其内容
有时只想使用圆括号的分组功能,但并不关心捕获的子匹配。例如,可以使用以下模式来匹配我名字的两种形式。
➾ /\v(And|D)rew Neil
这一次使用圆括号的目的在于匹配“Andrew”或者“Drew”,但可能并不想捕获位于圆括号内部的“And或D”。可以在圆括号前面加上% ,指示Vim不要将括号内的内容赋给寄存器 \1,就像这样。
➾ /\v%(And|D)rew Neil
运行结果与之前相比有区别么?当然,速度比原来快了一点,只是你可能察觉不到。但如果你发现自己经常会用到多组圆括号,这种方法就很有用处了。还以处理我名字的两种形式为例,假设想把所有的名和姓替换为姓和名。可以这样做:
➾ /\v(%(And|D)rew) (Neil)
➾ :%s//\2, \1/g
该查找模式会把“Andrew”或者“Drew”赋给寄存器 \1,而把“Neil”赋给寄存器 \2。如果有对第二组圆括号使用 %() ,便会得到无用的文本片段,从而扰乱替换域。
:::